
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>内核参数调优与资源管理 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>内核参数调优与资源管理 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">如何让通过 `sysctl` 修改的内核参数在 Linux 系统重启后依然生效？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">要让内核参数在重启后仍然有效，需要将参数配置写入 `/etc/sysctl.conf` 文件，然后执行 `sysctl -p` 命令来重新加载配置，使其立即生效。</div>
          </div>
          <div class="card-source">来源: 1.2 永久生效</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">为了提升 Web 服务器处理高并发 TCP 连接的能力，文档建议调整哪两个关键的内核参数？它们的作用分别是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档建议调整 `net.core.somaxconn` 和 `net.ipv4.tcp_max_syn_backlog`。`net.core.somaxconn` 用于增加 TCP 连接队列的长度，而 `net.ipv4.tcp_max_syn_backlog` 用于提高 SYN 请求队列的上限，两者结合可以有效降低高并发下连接丢失的风险。</div>
          </div>
          <div class="card-source">来源: 1.1 常见优化参数 & 实战案例：提升 Web 服务器的 TCP 连接能力</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">`vm.swappiness` 参数的作用是什么？将其值调低（例如 10）通常是为了达到什么目的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`vm.swappiness` 参数用于控制系统使用 Swap 交换分区的倾向性。将其值调低是为了降低系统进行 Swap 交换的频率，从而减少因过多交换导致的磁盘 IO，避免性能下降。</div>
          </div>
          <div class="card-source">来源: 1.1 常见优化参数 & 3.2 限制 Swap 交换</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在 Linux 中，如何将一个进程（如 Java 应用）绑定到特定的 CPU 核心上运行？这样做有什么好处？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以使用 `taskset` 命令将进程绑定到特定 CPU 核心，例如 `taskset -c 1,2 java -jar myapp.jar`。这样做的好处是能够提高进程的缓存命中率。</div>
          </div>
          <div class="card-source">来源: 2.1 调整 CPU 亲和性</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">如何保护一个关键进程（例如 Redis 或数据库）在系统内存不足时，不被 OOM Killer 优先杀死？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以通过调整该进程的 `oom_score_adj` 值来实现。将该值设置为一个较小的负数（例如 -1000），可以显著降低其被 OOM Killer 杀死的可能性。命令示例：`echo -1000 > /proc/$(pgrep <process_name>)/oom_score_adj`。</div>
          </div>
          <div class="card-source">来源: 3.1 调整 OOM 保护 & 实战案例：防止关键服务因内存不足被杀死</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">针对不同类型的硬盘和应用场景（如 SSD 和数据库），文档推荐了哪些不同的 IO 调度器？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档推荐了三种 IO 调度器：`noop` 适合 SSD 硬盘，因为它能减少不必要的调度开销；`deadline` 适合数据库应用，能有效减少请求的等待时间；`cfq` 适合普通的桌面系统。</div>
          </div>
          <div class="card-source">来源: 4.1 选择合适的 IO 调度器</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">启用 TCP Fast Open 对网络性能有什么具体的好处？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">启用 TCP Fast Open（通过设置 `net.ipv4.tcp_fastopen=3`）可以减少 TCP 三次握手的延迟，从而提高 HTTP 请求的响应速度，对于处理大量短连接的应用尤其有效。</div>
          </div>
          <div class="card-source">来源: 5.2 启用 TCP Fast Open</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">当高并发应用出现 `Too many open files` 错误时，应如何调整系统限制来解决？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以通过 `ulimit -n` 命令临时提高限制，或者通过修改 `/etc/security/limits.conf` 文件（例如设置 `* soft nofile 1048576` 和 `* hard nofile 1048576`）来进行永久性配置，以增大系统允许的最大文件打开数。</div>
          </div>
          <div class="card-source">来源: 6.1 限制最大文件打开数 & 实战案例：防止 Java 应用因文件句柄过多崩溃</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">`nice` 和 `renice` 命令的作用是什么？`nice` 值的范围和其代表的意义是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`nice` 和 `renice` 命令用于调整进程的 CPU 调度优先级。`nice` 值的范围是 -20 到 19，数值越小，代表进程的优先级越高，从而能获得更多的 CPU 计算资源。</div>
          </div>
          <div class="card-source">来源: 2.2 设置进程优先级</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
